package com.ljy.my_study.leetcode.螺旋矩阵II;

/**
 * @author lijunying
 * @date 2021/9/17 13:59
 */
public class TestMain {

//    给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
//
//             
//
//    示例 1：
//
//
//    输入：n = 3
//    输出：[[1,2,3],[8,9,4],[7,6,5]]
//    示例 2：
//
//    输入：n = 1
//    输出：[[1]]
//             
//
//    提示：
//
//            1 <= n <= 20
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/spiral-matrix-ii
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {

    }

    public int[][] generateMatrix(int n) {
        int[][] matrix=new int[n][n];
        int[][] directs={{0,1},{1,0},{0,-1},{-1,0}};
        int[][] lenChangeArray={{1,0,0,0},{0,0,0,-1},{0,-1,0,0},{0,0,1,0}};
        int xLen=n;
        int yLen=n;
        int xLeft=0;
        int xRight=xLen-1;
        int yLeft=0;
        int yRight=yLen-1;
        int x=0;
        int y=0;
        int count=0;
        int num=1;
        matrix[x][y]=num++;
        while(true){
            int index=count%4;
            int[] d=directs[index];
            int newX=x+d[0];
            int newY=y+d[1];
            if(xLeft>xRight||yLeft>yRight){
                break;
            }
            if(newX>=xLeft&&newX<=xRight&&newY>=yLeft&&newY<=yRight){
                x=newX;
                y=newY;
                matrix[x][y]=num++;
            }else{
                count++;
                xLeft+=lenChangeArray[index][0];
                xRight+=lenChangeArray[index][1];
                yLeft+=lenChangeArray[index][2];
                yRight+=lenChangeArray[index][3];
            }
        }
        return matrix;
    }
}
